/**系统框架基本功能**/
(function(){//扩展easyui中tabs的部分方法，实现根据唯一标识id的进行相应操作；技巧：使用一个自执行的函数，激发作用域，避免这里定义的变量与系统全局变量冲突
    var _methods = $.fn.tabs.methods;
    var _exists = _methods.exists;//保存原方法
    var _getTab = _methods.getTab;//<span style="font-family: Arial, Helvetica, sans-serif;">//保存原方法</span>
        $.extend($.fn.tabs.methods, {
            getTab : function(jq, which) {//重写getTab方法，增加根据id获取tab（注意：这里我们可以定义任意的获取方式，不必一定使用id）
                if(!which) return null;
                var tabs = jq.data('tabs').tabs;
                for (var i = 0; i < tabs.length; i++) {
                    var tab = tabs[i];
                    if (tab.panel("options").code==which) {
                        return tab;
                    }
                }
                return _getTab(jq, which);//如果根据id无法获取，则通过easyui默认的getTab进行获取
            },
            exists : function(jq, which) {//重写exists方法，增加id判断
                return this.getTab(jq,which)!=null;//调用重写后的getTab方法
            },
        });
})() ;

function addPanel(title , href){
    var mainContent = $('#mainContent') ;

    //如果tab已经存在,则选中并刷新该tab
    if ( mainContent.tabs('exists', title) ){
        mainContent.tabs('select', title) ;
        //refreshTab(mainContent , {
        //    title: title
        //}) ;
    }else{
        //内容
        var iframeId = getTabId() ;
        var content = '<iframe id="'+iframeId+'" scrolling="no" frameborder="0" src="'+href+'" style="width:100%;height:99%;"></iframe>';
        mainContent.tabs('add' , {
            _id : iframeId ,
            _sid : getCurrentTabIndex() ,
            title: title ,
            content: content ,
            closable: true ,
            border : false
        });
    }
}

/**
 * 关闭当前panel
 */
function closePanel(){
    var mainContent = $('#mainContent') ;
    mainContent.tabs('closeCurrent') ;
}

function showAllTabs() {
    var mainContent = $('#mainContent') ;
    console.log(JSON.stringify(mainContent.tabs( 'getCurrentTabId' ))) ;
}

window._tabid = new Date().getTime() ;
/**
 * 获取tab的唯一标识
 * @returns {number}
 */
function getTabId() {
    return window._tabid ++ ;
}

/**
 * 获取当前tab的索引值
 */
function getCurrentTabIndex() {
    var mainContent = $('#mainContent') ;
    return mainContent.tabs( 'getCurrentTabId' ) ;
}
/**
 * 获取当前tab来源的tab id
 */
function getSourceTabId() {
    var mainContent = $('#mainContent') ;
    return mainContent.tabs( 'getSourceTabId' ) ;
}

$.extend($.fn.tabs.methods,{
    allTabs:function(jq){
        var tabs = $(jq).tabs('tabs');
        var all = [];
        all = $.map(tabs,function(n,i){
            return $(n).panel('options')
        });
        return all;
    },
    allSourceTabs:function(jq){
        var tabs = $(jq).tabs('tabs');
        var all = [];
        all = $.map(tabs,function(n,i){
            return n
        });
        return all;
    },
    refreshCurrent : function(jq){
        var currentTab = $(jq).tabs('getSelected') ;
        if(currentTab && currentTab.find('iframe').length > 0){
            var _refresh_iframe = currentTab.find('iframe')[0];
            var refresh_url = _refresh_iframe.src ;
            _refresh_iframe.contentWindow.location.href = refresh_url ;
        }
    },
    //获取当前tab的来源的id
    getSourceTabId : function(jq){
        var currentTab = $(jq).tabs('getSelected') ;
        //获取当前tab的索引值
        return currentTab==null ? null : $(currentTab).panel('options')._sid ;
    } ,
    //获取当前tab的索引值
    getCurrentTabId : function(jq){
        var currentTab = $(jq).tabs('getSelected') ;
        //获取当前tab的索引值
        return currentTab==null ? null : $(currentTab).panel('options')._id ;
    } ,
    closeCurrent: function(jq){ // 关闭当前
        var currentTab = $(jq).tabs('getSelected'),
            currentTabIndex = $(jq).tabs('getTabIndex',currentTab);
        $(jq).tabs('close',currentTabIndex);
    },
    closeAll:function(jq){ //关闭全部
        var tabs = $(jq).tabs('allTabs');
        $.each(tabs,function(i,n){
            if(n.title=='首页'){
                return ;
            }
            $(jq).tabs('close', n.title);
        })
    },
    closeOther:function(jq){ //关闭除当前标签页外的tab页
        var tabs =$(jq).tabs('allTabs');
        var currentTab = $(jq).tabs('getSelected'),
            currentTabIndex = $(jq).tabs('getTabIndex',currentTab);

        $.each(tabs,function(i,n){
            if(currentTabIndex != i) {
                if(n.title=='首页'){
                    return ;
                }
                $(jq).tabs('close', n.title);
            }
        })
    },
    closeLeft:function(jq){ // 关闭当前页左侧tab页
        var tabs = $(jq).tabs('allTabs');
        var currentTab = $(jq).tabs('getSelected'),
            currentTabIndex = $(jq).tabs('getTabIndex',currentTab);
        var i = currentTabIndex-1;

        while(i > -1){
            if(tabs[i].title=='首页'){
                return ;
            }
            $(jq).tabs('close', tabs[i].title);
            i--;
        }
    },
    closeRight: function(jq){ //// 关闭当前页右侧tab页
        var tabs = $(jq).tabs('allTabs');
        var currentTab = $(jq).tabs('getSelected'),
            currentTabIndex = $(jq).tabs('getTabIndex',currentTab);
        var i = currentTabIndex+ 1,len = tabs.length;
        while(i < len){
            $(jq).tabs('close', tabs[i].title);
            i++;
        }
    }
}) ;

$(function(){
    $('#mainContent').tabs({
        onContextMenu:function(e, title,index){
            e.preventDefault();
            if(index>0){
                $('#tabRightMenu').menu('show', {
                    left: e.pageX,
                    top: e.pageY
                }).data("tabTitle", title);
            }
        }
    });

    //右键菜单click
    $("#tabRightMenu").menu({
        onClick : function (item) {
            var mainContent = $('#mainContent') ;
            switch ( item.name ){
                case 0 : {
                    mainContent.tabs('refreshCurrent') ;
                    break;
                };
                case 1 : {
                    mainContent.tabs('closeCurrent');
                    break;
                };
                case 2 : {
                    mainContent.tabs('closeAll');
                    break;
                };
                case 3 : {
                    mainContent.tabs('closeOther');
                    break;
                };
                case 4 : {
                    mainContent.tabs('closeLeft');
                    break;
                };
                case 5 : {
                    mainContent.tabs('closeRight');
                    break;
                };

            }
        }
    });
}) ;

/**
 * 刷新tab
 * @cfg
 *example: {tabTitle:'tabTitle',url:'refreshUrl'}
 *如果tabTitle为空，则默认刷新当前选中的tab
 *如果url为空，则默认以原来的url进行reload
 */
function refreshTab(cfg){

    var refresh_tab = null ;

    var mainContent = $('#mainContent') ;
    if( cfg._sid ){
        var tmpAllTabs = mainContent.tabs( 'allSourceTabs' ) ;
        for(var i = 0 ;i<tmpAllTabs.length ;i ++){
            if ( $(tmpAllTabs[i]).panel('options')._id == cfg._sid ){
                refresh_tab = tmpAllTabs[i] ;
                console.log("找到tab="+JSON.stringify(refresh_tab)) ;
                break ;
            }
        }
    }else{
        refresh_tab = cfg.title ? mainContent.tabs('getTab' , cfg.title) : mainContent.tabs('getSelected') ;
    }

    if(refresh_tab && refresh_tab.find('iframe').length > 0){
        var _refresh_ifram = refresh_tab.find('iframe')[0];
        var refresh_url = cfg.src ? cfg.src : _refresh_ifram.src ;
        _refresh_ifram.contentWindow.location.href = refresh_url ;
    }
}


//扩展form验证规则
$.extend($.fn.validatebox.defaults.rules, {
    eqPwd : {
        validator : function(value, param) {
            return value == $(param[0]).val();
        },
        message : '密码不一致！'
    },
    idcard : {// 验证身份证
        validator : function(value) {
            return /^\d{15}(\d{2}[A-Za-z0-9])?$/i.test(value);
        },
        message : '身份证号码格式不正确'
    },
    minLength: {
        validator: function(value, param){
            return value.length >= param[0];
        },
        message: '请输入至少（2）个字符.'
    },
    length:{validator:function(value,param){
        var len=$.trim(value).length;
        return len>=param[0]&&len<=param[1];
    },
        message:"输入内容长度必须介于{0}和{1}之间."
    },
    phone : {// 验证电话号码
        validator : function(value) {
            return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value);
        },
        message : '格式不正确,请使用下面格式:010-88888888'
    },
    mobile : {// 验证手机号码
        validator : function(value) {
            return /^13[0-9]{9}$|14[0-9]{9}|15[0-9]{9}$|18[0-9]{9}$|17[0-9]{9}$/i.test(value);
        },
        message : '手机号码格式不正确'
    },
    intOrFloat : {// 验证整数或小数
        validator : function(value) {
            return /^\d+(\.\d+)?$/i.test(value);
        },
        message : '请输入数字，并确保格式正确'
    },
    currency : {// 验证货币
        validator : function(value) {
            return /^\d+(\.\d+)?$/i.test(value);
        },
        message : '货币格式不正确'
    },
    qq : {// 验证QQ,从10000开始
        validator : function(value) {
            return /^[1-9]\d{4,9}$/i.test(value);
        },
        message : 'QQ号码格式不正确'
    },
    integer : {// 验证整数
        validator : function(value) {
            if( value == '0' ){
                return true ;
            }
            return /^[+]?[1-9]+\d*$/i.test(value);
        },
        message : '请输入整数'
    },
    age : {// 验证年龄
        validator : function(value) {
            return /^(?:[1-9][0-9]?|1[01][0-9]|120)$/i.test(value);
        },
        message : '年龄必须是0到120之间的整数'
    },
    chinese : {// 验证中文
        validator : function(value) {
            return /^[\Α-\￥]+$/i.test(value);
        },
        message : '请输入中文'
    },
    english : {// 验证英语
        validator : function(value) {
            return /^[A-Za-z]+$/i.test(value);
        },
        message : '请输入英文'
    },
    unnormal : {// 验证是否包含空格和非法字符
        validator : function(value) {
            return /.+/i.test(value);
        },
        message : '输入值不能为空和包含其他非法字符'
    },
    username : {// 验证用户名
        validator : function(value) {
            return /^[a-zA-Z][a-zA-Z0-9_]{5,15}$/i.test(value);
        },
        message : '用户名不合法（字母开头，允许6-16字节，允许字母数字下划线）'
    },
    faxno : {// 验证传真
        validator : function(value) {
            return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value);
        },
        message : '传真号码不正确'
    },
    zip : {// 验证邮政编码
        validator : function(value) {
            return /^[0-9]\d{5}$/i.test(value);
        },
        message : '邮政编码格式不正确'
    },
    ip : {// 验证IP地址
        validator : function(value) {
            return /d+.d+.d+.d+/i.test(value);
        },
        message : 'IP地址格式不正确'
    },
    name : {// 验证姓名，可以是中文或英文
        validator : function(value) {
            return /^[\Α-\￥]+$/i.test(value)|/^\w+[\w\s]+\w+$/i.test(value);
        },
        message : '请输入姓名'
    },
    msn:{
        validator : function(value){
            return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value);
        },
        message : '请输入有效的msn账号(例：abc@hotnail(msn/live).com)'
    }
});




